package com.java28.rbac.service.impl;

import com.java28.rbac.mapper.RoleMapper;
import com.java28.rbac.mapper.UserroleMapper;
import com.java28.rbac.pojo.Role;
import com.java28.rbac.pojo.RoleExample;
import com.java28.rbac.pojo.RoleExample;
import com.java28.rbac.pojo.Userrole;
import com.java28.rbac.pojo.UserroleExample;
import com.java28.rbac.pojo.UserroleExample.Criteria;
import com.java28.rbac.service.UserRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class UserRoleServiceImpl implements UserRoleService {

    @Autowired(required=false)
    UserroleMapper userroleMapper;
    @Autowired(required = false)
    RoleMapper roleMapper;


    @Override
    public List<Role> findAllByUserId(Integer userid) {
        UserroleExample userroleExample = new UserroleExample();
        Criteria userRoleCriteria = userroleExample.createCriteria();
        userRoleCriteria.andUseridEqualTo(userid);
        List<Userrole> userroleList = userroleMapper.selectByExample(userroleExample);
//        如果该用户没有角色信息
        if (userroleList.size()==0){
//            直接返回所有的角色信息
            return roleMapper.selectByExample(null);
        }
//        如果有用户信息
//        创建新的集合
        List<Integer> list = new ArrayList<Integer>();
//        循环用户信息,将角色Id添加到新的集合中
        for (Userrole userrole : userroleList) {
            list.add(userrole.getRoleid());
        }
//        创建角色查询条件
        RoleExample roleExample = new RoleExample();
        RoleExample.Criteria roleCriteria = roleExample.createCriteria();
//        将集合作为新的查询条件查询未拥有的角色信息
        roleCriteria.andRoleidNotIn(list);
        return roleMapper.selectByExample(roleExample);
    }

    @Override
    public List<Role> findAllByUserId2(Integer userid) {
        UserroleExample userroleExample = new UserroleExample();
        Criteria userRoleCriteria = userroleExample.createCriteria();
        userRoleCriteria.andUseridEqualTo(userid);
        List<Userrole> userroleList = userroleMapper.selectByExample(userroleExample);
//        如果该用户没有为拥有的角色信息
        if (userroleList.size()==0){
//            直接返回空
            return null;
        }
//        如果有未拥有的角色信息
//        创建新的集合
        List<Integer> list = new ArrayList<Integer>();
//        循环用户信息,将角色Id添加到新的集合中
        for (Userrole userrole : userroleList) {
            list.add(userrole.getRoleid());
        }
//        创建角色查询条件
        RoleExample roleExample = new RoleExample();
        RoleExample.Criteria roleCriteria = roleExample.createCriteria();
//        将集合作为新的查询条件查询已拥有的角色信息
        roleCriteria.andRoleidIn(list);
        return roleMapper.selectByExample(roleExample);
    }


    @Override
    public void save(Integer userid, Integer[] ids) {
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("userid",userid);
        map.put("roleids",ids);
        userroleMapper.addSelect(map);
    }

    @Override
    public void delete(Integer userid, Integer[] ids) {
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("userid",userid);
        map.put("roleids",ids);
        userroleMapper.deleteDelect(map);
    }
}
